/**
 * 
 */
package cn.ad.server.web.spring.service.components.falconadx;

import cn.ad.server.web.spring.service.components.falconadx.entity.ADXRequest;

import java.util.ArrayList;
import java.util.List;

/**
 * Falcon ADX 流量管理处理类
 * 该类描述到 ADX流量管理相关的业务操作， DSP注册， 流量分发，日志记录，权限管理等等
 * @author WU CHENGJUN
 */
public class ADXStreamDispaterManager {

	/**
	 * 接入的DSP客户端列表
	 */
	private List<DSPClient> dspclients = new ArrayList<>();
	

	/**
	 * 分发流量请求
	 * @param request
	 * @throws ADXStreamDispatchException
	 */
	public void doRequest(ADXRequest request) throws ADXStreamDispatchException{
		List<DSPClient> dspClients = getDispatcherClients();
		if(dspClients == null || dspClients.size() == 0){
			return;
		}
		
		//按顺序分发流量请求
		for(DSPClient client : dspClients){
			ADXRequest copyRequest  = copyRequest(request);
			DSPClientAdxStream stream = new DSPClientAdxStream(client, copyRequest);
			dispatchDspClient(stream);
		}
	}
	
	/**
	 * 根据传入的请求对象复制并生成一个新的对象
	 * @param request
	 * @return
	 */
	private ADXRequest copyRequest(final ADXRequest request){
		//FIXME 注意此处的复制当不要破坏原来的请求实例
		
		return null;
	}
	
	/**
	 * 发送流量
	 * 在子流程中必须采用异步方式处理，以保证不需要等到上一次发送结果返回后才发送下一条请求
	 * @param stream
	 */
	private void dispatchDspClient(DSPClientAdxStream stream){
		
	}
	
	
	/**
	 * 获取需要分发的DSP客户端列表
	 * @return
	 */
	public List<DSPClient> getDispatcherClients(){
		//TODO 
		return null;
	}
}
